package clienteEmpresaTest

import org.scalatest.Suite
import org.junit.runner.RunWith
import org.scalatest.junit.JUnitRunner
import comunicaciones.LlamadaLocal
import comunicaciones.LlamadaLargaDistancia
import comunicaciones.MensajeDeTexto
import cliente.empresa.Cliente
import java.util.Date


@RunWith(classOf[JUnitRunner])
class TestCliente extends Suite{
  
  def testObtenerLaLlamadaMasLargaDelCliente(){
    val call1 =  (new LlamadaLocal(1,420))
    val call2 =  (new LlamadaLargaDistancia(2,"","",240))
    val call3 =  (new MensajeDeTexto(3,0))
    var llamadas = List(call1, call2, call3)
    var cliente = new Cliente("",llamadas)
    assert(cliente.llamadaMasLarga() === call1)
  }
  
  def testMinutosusadosEnElMesDeFebrero(){
     var call1 =  (new LlamadaLocal(1,420))
     call1.getFechaDeRealizacion().setMonth(2) // llamada de feb dura 7 mins
     var call2 =  (new LlamadaLargaDistancia(2,"","",240))
     call2.getFechaDeRealizacion().setMonth(2) // llamada de feb dura 4 mins
     var call3 =  (new LlamadaLocal(3,60))
     call3.getFechaDeRealizacion().setMonth(1) // llamada de ene dura 1 mins
     var llamadas = List(call1, call2, call3)
     var client = new Cliente("", llamadas)
     assert(client.minutosUsadosEnMes(2) == 11) 
     
  }
  
  def testCostoTotalDelMesDeFebreroDeUnClienteSinPlanes(){
     var call1 =  (new LlamadaLocal(1,420))
     call1.getFechaDeRealizacion().setMonth(2) // llamada local de feb dura 7 mins = 4.2 
     var call2 =  (new LlamadaLargaDistancia(2,"Quilmes","Wilde",240))
     call2.getFechaDeRealizacion().setMonth(2) // llamada LD de feb dura 4 mins = 47.5 
     var call3 =  (new LlamadaLocal(3,60))
     call3.getFechaDeRealizacion().setMonth(1) // llamada de ene dura 1 mins que no se suma a la cuenta  
     var llamadas = List(call1, call2, call3)
     var client = new Cliente("", llamadas)
     assert(client.montoAFacturarEnMes(2) == 51.7) 
  }
  
  def testCantLlamadasLargasDelMesDeFebrero(){
     var call1 =  (new LlamadaLargaDistancia(1,"","",420)) // unica llamada larga de febrero
     call1.getFechaDeRealizacion().setMonth(2) 
     var call2 =  (new LlamadaLargaDistancia(2,"Quilmes","Wilde",240)) // llamada de feb pero no larga
     call2.getFechaDeRealizacion().setMonth(2) 
     var call3 =  (new LlamadaLocal(3,360))
     call3.getFechaDeRealizacion().setMonth(1) // llamada larga pero no de feb
     var llamadas = List(call1, call2, call3)
     var client = new Cliente("", llamadas)
     assert(client.cantLlamadasLargas(2) == 1) 
  }
  
  def testCiudadesALasQueSeLesLlamodeLargaDistancia(){
     var call1 =  (new LlamadaLargaDistancia(1,"Quilmes","Ezpeleta",420)) 
     call1.getFechaDeRealizacion().setMonth(2) 
     
     var call2 =  (new LlamadaLargaDistancia(2,"Quilmes","Wilde",240)) 
     call2.getFechaDeRealizacion().setMonth(2) 
     
     var call3 =  (new LlamadaLocal(3,360))
     call3.getFechaDeRealizacion().setMonth(2) // llamada  de feb no de larga distancia
     
     var llamadas = List(call1, call2, call3)
     var client = new Cliente("", llamadas)
     var citys = client.ciudadesALasQueSeHizoLlamadasDeLargaDistancia(2)
     assert( citys.contains("Ezpeleta"))
     assert( citys.contains("Wilde")) 
  }
  
  def testDiasConMasLLamadasDelMesDeFebrero(){
 
     var call1 =  (new LlamadaLargaDistancia(1,"Quilmes","Ezpeleta",420)) // llamada del dia 2 de feb
     call1.fechaDeRealizacion = new Date(2013,2,2)
     
     var call2 =  (new LlamadaLargaDistancia(2,"Quilmes","Wilde",240))  // llamada del dia 2 de feb
     call2.fechaDeRealizacion = new Date(2013,2,2)
     
     var call3 =  (new LlamadaLocal(3,360))
     call3.fechaDeRealizacion = new Date(2013,2,3) // llamada del dia 3 de feb
       
     var llamadas = List(call1, call2, call3)
     var client = new Cliente("", llamadas)
     var dia = client.diaConMasComunicaciones(2)
     assert( dia == 2)
     
  }

}